/*
 * Copyright (c) 2018.
 * http://www.ulabcare.com
 */

package com.mt.roll.passport.feign.fallback;

import com.mt.roll.core.dto.LoginUser;
import com.mt.roll.core.dto.Permission;
import com.mt.roll.core.vo.LoginUserVo;
import com.mt.roll.core.vo.R;
import com.mt.roll.passport.feign.PlatformUpmsService;
import com.mt.roll.upms.params.ModifyPasswordParam;
import com.mt.roll.upms.service.UpmsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * @author jiff
 * @date 2018/11/1
 * @since 1.0
 */
@Slf4j
@Service
public class PlatformUpmsServiceFallback implements PlatformUpmsService {
    @Autowired
    private UpmsService upmsService;

    /**
     * 获取当前用户权限信息
     *
     * @return 权限信息
     */
    @Override
    public List<Permission> getPermissions() {
        if (isDebug()) {
            log.warn("平台通用权限管理服务不可用，使用缓存权限数据");
            List<Permission> permissions = new ArrayList<>();
            permissions.add(Permission.builder().url("/**").method(HttpMethod.GET.name()).build());
            permissions.add(Permission.builder().url("/**").method(HttpMethod.POST.name()).build());
            return permissions;
        }
        return upmsService.getPermissions();
    }

    /**
     * 获取当前登录用户信息
     *
     * @return 登录用户信息
     */
    @Override
    public R<LoginUserVo> getLoginUser() {
        if (isDebug()) {
            log.warn("平台通用权限管理服务不可用，使用测试用户数据");
            return R.ok(LoginUserVo.builder().userId(1L).mobile("13588441519").userName("jiff")
                    .orgId(1L).build());
        }
        return upmsService.getLoginUserVo();
    }

    /**
     * 获取登录用户信息
     *
     * @param mobile 手机号码
     * @return 登录用户信息
     */
    @Override
    public R<LoginUser> getLoginUser(String mobile) {
        if (isDebug()) {
            log.warn("平台通用权限管理服务不可用，使用测试用户数据");
            return R.ok(LoginUser.builder().userId(1L).mobile(mobile).userName("jiff")
                    .orgId(1L).userType(LoginUser.USER_TYPE_PLATFORM).build());
        }
        return upmsService.getLoginUser(mobile);
    }

    /**
     * 密码登录
     *
     * @param mobile   手机号码
     * @param password 密码
     * @return 登录结果
     */
    @Override
    public R<LoginUser> login(String mobile, String password) {
        if (isDebug()) {
            log.warn("平台通用权限管理服务不可用，使用测试用户数据");
            return R.ok(LoginUser.builder().userId(1L).mobile("13588441519").userName("jiff")
                    .orgId(1L).userType(LoginUser.USER_TYPE_PLATFORM).build());
        }
        return upmsService.login(mobile, password);
    }


    /**
     * 修改密码
     *
     * @param param 修改密码参数
     * @return 处理结果
     */
    @Override
    public R<Serializable> modifyPassword(ModifyPasswordParam param) {
        return R.failed();
    }

    /**
     * 退出登录
     *
     * @return 处理结果
     */
    @Override
    public R<Serializable> logout() {
        return upmsService.logout();
    }
}
